//后台地址
const baseUrl = 'http://10.35.11.100:8868'

//全局提示框
import tips from './tips'

//未登录时，弹窗默认只提示一次
let code_401 = true

/**
 * 封装请求方法
 * @param {*} url 请求地址
 * @param {*} options 请求参数
 * @param {*} headers 自定义消息头
 */
const request = (url, options, headers) => {
  let requsetHeader = {}
  if (['/api-admin/user/login/NoSec', '/api-admin/user/login/weChat'].includes(url)) { //登录接口
    requsetHeader = headers
  } else { //其它接口
    if (Object.keys(headers).length > 0) {
      requsetHeader = headers //自定义请求头
    }
    requsetHeader['Authorization'] = wx.getStorageSync('token')
  }
  return new Promise((resolve, reject) => {
    wx.request({
      url: baseUrl + url, //请求地址
      method: options.method, //请求方式
      data: options.data, //请求参数
      //data: options.method === 'GET' ? options.data : JSON.stringify(options.data), //如果是GET,GET自动让数据成为query String,其他方法需要让options.data转化为字符串
      header: requsetHeader, //请求头
      success(request) {
        tips.clearLoading()
        let code = request.data.code
        //状态码是200的情况进入回调
        if (code === 200) {
          resolve(request.data)
        } else {
          //状态码不是200的情况进行相应拦截提示
          switch (code) {
            case 400:
              tips.toast('请求参数错误');
              break
            case 401:
              //未登录弹窗只提示一次，除非用户点击取消后下一次才会再次提醒
              if (code_401) {
                code_401 = false
                wx.showModal({
                  title: '提示',
                  content: '您还未登录，请先登录',
                  success(res) {
                    if (res.confirm) {
                      wx.navigateTo({
                        url: '../../pages/login/index'
                      })
                    } else if (res.cancel) {
                      //console.log('用户点击取消')
                    }
                    code_401 = true
                  }
                })
              }
              break
            case 403:
              tips.toast('访问权限不足');
              break
            case 404:
              tips.toast('请求地址错误');
              break
            case 500:
              tips.toast(request.data.message);
              break
            case 40302:
              tips.toast(request.data.message, 3000);
              break
            default:
              tips.toast(request.data.message);
              reject(request.data)
              break
          }
        }
      },
      //请求失败
      fail(error) {
        tips.clearLoading()
        tips.toast('请求超时，请检查网络连接状态');
        reject(error.data)
      }
    })
  })
}

//get方法
const get = (url, options = {}, headers = {}) => {
  return request(url, {
    method: 'GET',
    data: options
  }, headers)
}

//post方法
const post = (url, options = {}, headers = {}) => {
  return request(url, {
    method: 'POST',
    data: options
  }, headers)
}

module.exports = {
  get,
  post,
  baseUrl,
}